home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2.sit
/
Raven 1.2
/
Source
/
Foundation
/
Common
/
ZUnitTest.cpp
< prev
next >
Wrap
Text File
|
1997-06-21
|
5KB
|
233 lines
/*
* File: ZUnitTest.cpp
* Summary: Singleton that keeps pointers to test functions.
* Written by: Jesse Jones
*
* Copyright ゥ 1996-1997 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <2> 6/20/97 JDJ Renamed TUnitTest TUnitTests.
* <1> 6/29/96 JDJ Created
*/
#include <ZUnitTest.h>
#include <Set.h>
#include <ZConstants.h>
#include <ZDebug.h>
#if DEBUG
// ===================================================================================
// class ZUnitTestSet
// ===================================================================================
class ZUnitTestSet : public set<SUnitTest, less<SUnitTest>, allocator<SUnitTest> > {
public:
ZUnitTestSet() : set<SUnitTest, less<SUnitTest>, allocator<SUnitTest> >() {}
};
// ===================================================================================
// class TUnitTests
// ===================================================================================
static ZUnitTestSet::iterator sCursor;
//----------------------------------------------------------------
//
// TUnitTests::~TUnitTests
//
//----------------------------------------------------------------
TUnitTests::~TUnitTests()
{
sCursor = mTests->end();
delete mTests;
}
//----------------------------------------------------------------
//
// TUnitTests::TUnitTests
//
//----------------------------------------------------------------
TUnitTests::TUnitTests()
{
mTests = new ZUnitTestSet;
}
//----------------------------------------------------------------
//
// TUnitTests::Instance [static]
//
//----------------------------------------------------------------
TUnitTests* TUnitTests::Instance()
{
static TUnitTests tester;
return &tester;
}
//----------------------------------------------------------------
//
// TUnitTests::AddTest
//
//----------------------------------------------------------------
void TUnitTests::AddTest(const string& name, TestProc test)
{
ASSERT(name.length() != 0);
ASSERT(mTests->find(name) == mTests->end());
ASSERT(test != nil);
mTests->insert(SUnitTest(name, test));
}
//----------------------------------------------------------------
//
// TUnitTests::IsTest
//
//----------------------------------------------------------------
bool TUnitTests::IsTest(const string& name) const
{
ZUnitTestSet::iterator iter = mTests->find(name);
return iter != mTests->end();
}
//----------------------------------------------------------------
//
// TUnitTests::GetCount
//
//----------------------------------------------------------------
ulong TUnitTests::GetCount() const
{
return mTests->size();
}
//----------------------------------------------------------------
//
// TUnitTests::ResetCursor
//
//----------------------------------------------------------------
void TUnitTests::ResetCursor()
{
sCursor = mTests->begin();
}
//----------------------------------------------------------------
//
// TUnitTests::GetNextTest
//
//----------------------------------------------------------------
SUnitTest TUnitTests::GetNextTest()
{
const SUnitTest& entry = *sCursor++;
return entry;
}
//----------------------------------------------------------------
//
// TUnitTests::CursorAtEnd
//
//----------------------------------------------------------------
bool TUnitTests::CursorAtEnd() const
{
return sCursor == mTests->end();
}
//----------------------------------------------------------------
//
// TUnitTests::DoTest
//
//----------------------------------------------------------------
void TUnitTests::DoTest(const string& name)
{
bool oldIntense = gIntenseDebugging;
gIntenseDebugging = true;
try {
ZUnitTestSet::iterator iter = mTests->find(name);
ASSERT(iter != mTests->end());
const SUnitTest& entry = *iter;
TestProc test = entry.test;
(*test)();
} catch (...) {
DEBUGSTR("Caught an exception in TUnitTests::DoTests!");
}
gIntenseDebugging = oldIntense;
}
//----------------------------------------------------------------
//
// TUnitTests::DoAllTests
//
//----------------------------------------------------------------
void TUnitTests::DoAllTests()
{
bool oldIntense = gIntenseDebugging;
gIntenseDebugging = true;
try {
ZUnitTestSet::iterator iter = mTests->begin();
while (iter != mTests->end()) {
const SUnitTest& entry = *iter++;
TestProc test = entry.test;
(*test)();
}
} catch (...) {
DEBUGSTR("Caught an exception in TUnitTests::DoAllTests!");
}
gIntenseDebugging = oldIntense;
}
#pragma mark -
// ===================================================================================
// class TUnitTestRegistrar
// ===================================================================================
//----------------------------------------------------------------
//
// TUnitTestRegistrar::~TUnitTestRegistrar
//
//----------------------------------------------------------------
TUnitTestRegistrar::~TUnitTestRegistrar()
{
}
//----------------------------------------------------------------
//
// TUnitTestRegistrar::TUnitTestRegistrar
//
//----------------------------------------------------------------
TUnitTestRegistrar::TUnitTestRegistrar(const string& name, TestProc test)
{
TUnitTests::Instance()->AddTest(name, test);
}
#endif // DEBUG